package com.starhub.monitor.service;

import com.starhub.monitor.dto.ActivityLogDto;
import com.starhub.monitor.dto.AgentUsageStatsDto;
import com.starhub.monitor.dto.MonitorStatsDto;
import com.starhub.monitor.dto.SystemResourcesDto;
import com.starhub.monitor.dto.ChatLogDetailDto;
import java.time.LocalDateTime;
import java.util.List;

public interface IMonitorStatsService {
    
    /**
     * 获取今日总请求次数
     * @return 今日总请求次数
     */
    Long getTodayTotalRequests();
    
    /**
     * 获取智能体总数
     * @return 智能体总数
     */
    Long getTotalAgents();
    
    /**
     * 获取总用户数
     * @return 总用户数
     */
    Long getTotalUsers();
    
    /**
     * 获取API调用总次数
     * @return API调用总次数
     */
    Long getTotalApiCalls();
    
    /**
     * 获取对话总数
     * @return 对话总数
     */
    Long getTotalConversations();
    
    /**
     * 获取最近活动日志
     * @param limit 限制返回的记录数
     * @return 活动日志列表
     */
    List<ActivityLogDto> getRecentActivityLogs(int limit);
    
    /**
     * 获取按时间段统计的请求数据
     * @param type 统计类型: day-按日统计，week-按周统计，month-按月统计
     * @param time 统计时间: day-具体日期(2024-03-20)，week-月份(2024-03)，month-年份(2024)
     * @return 统计数据
     */
    MonitorStatsDto getRequestStatsByTime(String type, String time);
    
    /**
     * 获取监控仪表盘所有统计数据
     * @return 所有统计数据
     */
    MonitorStatsDto getDashboardStats();
    
    /**
     * 根据自定义时间范围获取请求统计数据
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param interval 时间间隔类型：hour-按小时，day-按天，month-按月
     * @return 时间段统计数据
     */
    MonitorStatsDto getRequestStatsByCustomTimeRange(
            LocalDateTime startTime, LocalDateTime endTime, String interval);
            
    /**
     * 获取系统资源使用情况
     * @return 系统资源使用情况信息
     */
    SystemResourcesDto getSystemResources();
    
    /**
     * 获取告警数量（状态为2的记录数量）
     * @return 告警数量
     */
    Long getTotalAlerts();
    
    /**
     * 获取错误数量（状态为0的记录数量）
     * @return 错误数量
     */
    Long getTotalErrors();
    
    /**
     * 获取正常数量（状态为1的记录数量）
     * @return 正常数量
     */
    Long getTotalNormals();
    
    /**
     * 获取智能体使用统计数据
     * @return 智能体使用统计数据列表
     */
    List<AgentUsageStatsDto> getAgentUsageStats();

    List<ChatLogDetailDto> getChatLogDetails(LocalDateTime startTime, LocalDateTime endTime, Integer status);
} 